#ifndef ArvBinNodo_
#define ArvBinNodo_

template<class T>
class ArvBinNodo {
private:
	T inf;
	int feq;
	ArvBinNodo<T> *esq;
	ArvBinNodo<T> *dir;

public:
	ArvBinNodo();
	ArvBinNodo(const T& info, ArvBinNodo<T>* apesq, ArvBinNodo<T>* apdir);
	ArvBinNodo(const ArvBinNodo<T>& n);
	~ArvBinNodo();

	T getInf() const;
	void setInf(const T & i);

	int getFeq() const;
	void setFeq(int f);

	ArvBinNodo<T> * getEsq();
	void setEsq(ArvBinNodo<T> * pnodo);

	ArvBinNodo<T> * getDir();
	void setDir(ArvBinNodo<T> * pnodo);

	ArvBinNodo<T> & operator =(ArvBinNodo<T> n);
};

template<class T>
ArvBinNodo<T>::ArvBinNodo() {
	esq = dir = NULL;
}

template<class T>
ArvBinNodo<T>::ArvBinNodo(const T& info, ArvBinNodo<T>* apesq, ArvBinNodo<T>* apdir) {
	inf = info;
	feq = 0;
	esq = apesq;
	dir = apdir;
}

template<class T>
ArvBinNodo<T>::ArvBinNodo(const ArvBinNodo<T>& n) {
	inf = n.inf;
	feq = n.feq;
	esq = n.esq;
	dir = n.dir;
}

template<class T>
ArvBinNodo<T>::~ArvBinNodo() {

}

template<class T>
T ArvBinNodo<T>::getInf() const {
	return inf;
}

template<class T>
void ArvBinNodo<T>::setInf(const T & i) {
	inf = i;
}

template<class T>
int ArvBinNodo<T>::getFeq() const {
	return feq;
}

template<class T>
void ArvBinNodo<T>::setFeq(int f) {
	feq = f;
}

template<class T>
ArvBinNodo<T>* ArvBinNodo<T>::getEsq() {
	return esq;
}

template<class T>
void ArvBinNodo<T>::setEsq(ArvBinNodo<T> * pnodo) {
	esq = pnodo;
}

template<class T>
ArvBinNodo<T>* ArvBinNodo<T>::getDir() {
	return dir;
}

template<class T>
void ArvBinNodo<T>::setDir(ArvBinNodo<T> * pnodo) {
	dir = pnodo;
}

template<class T>
ArvBinNodo<T> & ArvBinNodo<T>::operator =(ArvBinNodo<T> n) {
	inf = n.inf;
	feq = n.feq;
	esq = n.esq;
	dir = n.dir;

	return *this;
}

#endif
